home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / net / flow.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  1.9 KB  |  103 lines

  1. /*
  2.  *
  3.  *    Generic internet FLOW.
  4.  *
  5.  */
  6.  
  7. #ifndef _NET_FLOW_H
  8. #define _NET_FLOW_H
  9.  
  10. #include <linux/in6.h>
  11. #include <asm/atomic.h>
  12.  
  13. struct flowi {
  14.     int    oif;
  15.     int    iif;
  16.     __u32    mark;
  17.  
  18.     union {
  19.         struct {
  20.             __be32            daddr;
  21.             __be32            saddr;
  22.             __u8            tos;
  23.             __u8            scope;
  24.         } ip4_u;
  25.         
  26.         struct {
  27.             struct in6_addr        daddr;
  28.             struct in6_addr        saddr;
  29.             __be32            flowlabel;
  30.         } ip6_u;
  31.  
  32.         struct {
  33.             __le16            daddr;
  34.             __le16            saddr;
  35.             __u8            scope;
  36.         } dn_u;
  37.     } nl_u;
  38. #define fld_dst        nl_u.dn_u.daddr
  39. #define fld_src        nl_u.dn_u.saddr
  40. #define fld_scope    nl_u.dn_u.scope
  41. #define fl6_dst        nl_u.ip6_u.daddr
  42. #define fl6_src        nl_u.ip6_u.saddr
  43. #define fl6_flowlabel    nl_u.ip6_u.flowlabel
  44. #define fl4_dst        nl_u.ip4_u.daddr
  45. #define fl4_src        nl_u.ip4_u.saddr
  46. #define fl4_tos        nl_u.ip4_u.tos
  47. #define fl4_scope    nl_u.ip4_u.scope
  48.  
  49.     __u8    proto;
  50.     __u8    flags;
  51. #define FLOWI_FLAG_ANYSRC 0x01
  52.     union {
  53.         struct {
  54.             __be16    sport;
  55.             __be16    dport;
  56.         } ports;
  57.  
  58.         struct {
  59.             __u8    type;
  60.             __u8    code;
  61.         } icmpt;
  62.  
  63.         struct {
  64.             __le16    sport;
  65.             __le16    dport;
  66.         } dnports;
  67.  
  68.         __be32        spi;
  69.  
  70.         struct {
  71.             __u8    type;
  72.         } mht;
  73.     } uli_u;
  74. #define fl_ip_sport    uli_u.ports.sport
  75. #define fl_ip_dport    uli_u.ports.dport
  76. #define fl_icmp_type    uli_u.icmpt.type
  77. #define fl_icmp_code    uli_u.icmpt.code
  78. #define fl_ipsec_spi    uli_u.spi
  79. #define fl_mh_type    uli_u.mht.type
  80.     __u32           secid;    /* used by xfrm; see secid.txt */
  81. } __attribute__((__aligned__(BITS_PER_LONG/8)));
  82.  
  83. #define FLOW_DIR_IN    0
  84. #define FLOW_DIR_OUT    1
  85. #define FLOW_DIR_FWD    2
  86.  
  87. struct sock;
  88. typedef int (*flow_resolve_t)(struct flowi *key, u16 family, u8 dir,
  89.                    void **objp, atomic_t **obj_refp);
  90.  
  91. extern void *flow_cache_lookup(struct flowi *key, u16 family, u8 dir,
  92.                     flow_resolve_t resolver);
  93. extern void flow_cache_flush(void);
  94. extern atomic_t flow_cache_genid;
  95.  
  96. static inline int flow_cache_uli_match(struct flowi *fl1, struct flowi *fl2)
  97. {
  98.     return (fl1->proto == fl2->proto &&
  99.         !memcmp(&fl1->uli_u, &fl2->uli_u, sizeof(fl1->uli_u)));
  100. }
  101.  
  102. #endif
  103.